Fix config file parsing for VMX domains.
authorkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Thu, 11 Aug 2005 20:58:08 +0000 (20:58 +0000)
committerkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Thu, 11 Aug 2005 20:58:08 +0000 (20:58 +0000)
If we define "vif" in the config file, image.py will raise error "vmx:
missing vbd configuration". The reason is "vif" is dealt with as a "vbd"
device.

This patch fixes this issue by dealing with "vbd" and "vif " separately,
removing "macaddr" arg and parsing mac address from "vif" instead.

Also, the vbd doesn't have to be a file anymore, but can be a physical
disk partition.

Signed-off-by: Yunfeng Zhao <yunfeng.zhao@intel.com>
Signed-off-by: Arun Sharma <arun.sharma@intel.com>
tools/examples/xmexample.vmx
tools/python/xen/xend/image.py

index 1c85a02d4ccd84f5d183bdb6ff78cccb939648e9..830fdc11e78ee01d5e6ecf44bd06b145eb86da5f 100644 (file)
@@ -132,8 +132,3 @@ vnc=1
 #-----------------------------------------------------------------------------
 #    start in full screen
 #full-screen=1   
-
-#-----------------------------------------------------------------------------
-#   set the mac address of the first interface
-#macaddr=  
-
index 608fe55c6b3db2f6c229fba53ce15fe0dca7c285..908299d626da621b175fbf7100922bf840d27c04 100644 (file)
@@ -305,7 +305,7 @@ class VmxImageHandler(ImageHandler):
     # xm config file
     def parseDeviceModelArgs(self):
        dmargs = [ 'cdrom', 'boot', 'fda', 'fdb',
-                   'localtime', 'serial', 'macaddr', 'stdvga', 'isa' ] 
+                   'localtime', 'serial', 'stdvga', 'isa' ] 
        ret = []
        for a in dmargs:
                    v = sxp.child_value(self.vm.config, a)
@@ -322,20 +322,25 @@ class VmxImageHandler(ImageHandler):
                ret.append("-%s" % a)
                ret.append("%s" % v)
 
-        # Handle hd img related options
+        # Handle disk/network related options
         devices = sxp.children(self.vm.config, 'device')
         for device in devices:
-            vbdinfo = sxp.child(device, 'vbd')
-            if not vbdinfo:
-                raise VmError("vmx: missing vbd configuration")
-            uname = sxp.child_value(vbdinfo, 'uname')
-            vbddev = sxp.child_value(vbdinfo, 'dev')
-            (vbdtype, vbdparam) = string.split(uname, ':', 1)
-            vbddev_list = ['hda', 'hdb', 'hdc', 'hdd']
-            if vbdtype != 'file' or vbddev not in vbddev_list:
-                raise VmError("vmx: for qemu vbd type=file&dev=hda~hdd")
-            ret.append("-%s" % vbddev)
-            ret.append("%s" % vbdparam)
+            name = sxp.name(sxp.child0(device))
+            if name == 'vbd':
+               vbdinfo = sxp.child(device, 'vbd')
+               uname = sxp.child_value(vbdinfo, 'uname')
+               vbddev = sxp.child_value(vbdinfo, 'dev')
+               (vbdtype, vbdparam) = string.split(uname, ':', 1)
+               vbddev_list = ['hda', 'hdb', 'hdc', 'hdd']
+               if vbddev not in vbddev_list:
+                  raise VmError("vmx: for qemu vbd type=file&dev=hda~hdd")
+               ret.append("-%s" % vbddev)
+               ret.append("%s" % vbdparam)
+            if name == 'vif':
+               vifinfo = sxp.child(device, 'vif')
+               mac = sxp.child_value(vifinfo, 'mac')
+               ret.append("-macaddr")
+               ret.append("%s" % mac)
 
        # Handle graphics library related options
        vnc = sxp.child_value(self.vm.config, 'vnc')